package com.sxj.corejava.code11_io.File;

import java.io.File;

/**
 * @author 石小俊
 * @date 2025年02月21日
 * 删除指定目录下所有的空目录,包括子目录下的空目录
 */
public class Test06_练习 {

    public static void main(String[] args) {
        remove("E:\\test", "E:\\test");
    }

    public static void remove(String path, String rootPath) {
        File file = new File(path);
        // 递归结束条件
        if (!file.exists()) {
            return;
        }

        // 判断当前文件是否是一个目录
        if (file.isDirectory()) {
            // 如果是目录,则判断当前目录是否我一个空目录
            // 如果该目录中子元素的数量为0,则说明是一个空目录
            if (file.listFiles().length == 0) {
                // 删除当前目录
                System.out.println("删除空目录:" + file.getAbsolutePath());
                file.delete();
                // 当删除了空目录之后,当前目录本身也可能会成为空目录
                // 例如:一个目录中只有一个子目录,没有其他文件,且这个子目录本身属于空目录
                // 那么当这个子目录被删除后,当前目录也将成为空目录
                // 因此,删除了当前目录之后,需要判断该目录的上级目录是否是空目录
                // 如果当前目录是根目录,则不需要考虑上级目录
                String filePath = file.getAbsolutePath();
                if (!rootPath.equals(filePath)) {
                    // 如果当前目录不是根目录,则获取上级目录进行递归
                    remove(file.getParentFile().getAbsolutePath(), rootPath);

                }
            } else {
                // 如果当前不是空目录,则获取当前目录中所有子元素
                File[] files = file.listFiles();
                for (File f : files) {
                    // 递归删除
                    remove(f.getAbsolutePath(), rootPath);
                }
            }
        }
        // 如果不是目录,什么都不用做

    }

}
